from collections import defaultdict
# 题目来源
# https://www.lanqiao.cn/problems/20273/learning/?contest_id=250
MOD = 10 ** 9 + 7

n, d = map(int, input().split())
a = list(map(int, input().split()))

# 分组：国家 -> 位置列表（电脑编号从1到n）
country_positions = defaultdict(list)
for idx in range(n):
    computer = idx + 1  # 电脑编号从1开始
    country_positions[a[idx]].append(computer)

result = 1

for pos_list in country_positions.values():
    m = len(pos_list)
    pos_list.sort()

    # 计算选两个的情况数
    two_count = 0
    j = 0
    for i in range(m):
        # 移动j到最大的位置，使得 pos_list[j] - pos_list[i] <= d
        while j < m and pos_list[j] - pos_list[i] <= d:
            j += 1
        # 可选的j是i+1到j-1，共(j - i - 1)个
        two_count += (j - i - 1)

    # 该国家的总方案数：不选 + 选1个 + 选2个
    total = 1 + m + two_count
    result = (result * total) % MOD

# 减去全不选的情况
result = (result - 1) % MOD
print(result)